Skip to content

OSINT: canonical 0x0700 ClassView card + FieldMask ViewFilter + Epstein-broker power#70

Merged
AdaWorldAPI merged 4 commits into
mainfrom
claude/v3-substrate-migration-review-o0yoxv
Jul 1, 2026
Merged

OSINT: canonical 0x0700 ClassView card + FieldMask ViewFilter + Epstein-broker power#70
AdaWorldAPI merged 4 commits into
mainfrom
claude/v3-substrate-migration-review-o0yoxv

Conversation

@AdaWorldAPI

@AdaWorldAPI AdaWorldAPI commented Jul 1, 2026

Copy link
Copy Markdown
Owner

What

Follow-up to the merged #69 (which is now in main). Three commits, cherry-picked onto current main:

  1. Author the canonical 0x0700 OSINT ClassView — the AIRO/AIwar card the substrate was missing.
  2. powerOfActor — catch the backdoor-networker (Epstein) archetype via graph position, not the AIRO enum.
  3. Server-side FieldMask card render — the Redmine ERB ViewFilter, /api/osint/card.html.

Changes

crates/cockpit-server/src/osint_classview.rs (new)OsintClassView impls lance_graph_contract::ClassView for classid 0x0700 with the 12-field card (bit i = ValueTenant position i). predicate_iri carries the reasoning role (need/offer/intent/causality/person/state/identity/relation), so the Demand ⊥ Causality axes and the Person×Situation split are read from the schema, not hard-coded. Bit 11 = McClelland motive. Two endpoints:

  • GET /api/osint/card?mask=<bits> → JSON render_rows(0x0700, mask).
  • GET /api/osint/card.html?mask=<bits> → the same projection as HTML (the ViewFilter, server-side, in the codebase's Html<String> idiom — render_rows is template-agnostic, so an askama template is a drop-in swap later).

Unit tests cover the 12-field order + the mask filter. This is owner-authored q2-local (same pattern as mock_driver.rs); canonical home is OGAR's osint ObjectView, to be mirrored upstream.

cockpit/src/OsintGraph.tsx

  • 4-level power gradient fixedpowerOfAiro previously skipped P2 (went 1→3→4). Now all four reachable: P1 Subject (consume) · P2 Operator (control self) · P3 Deployer (control others) · P4 Developer/Provider/Supplier (empower others). Freud stages / Rheinberg's Potsdam lectures on McClelland's nPow base.
  • powerOfActor — for Person/Stakeholder nodes, power reads from graph position: Burt structural-hole brokerage (degree × neighbour-openness) = the P4 backdoor platform bridging separate power circles. The Epstein archetype has no AIRO role, so powerOfAiro scored him P0; powerOfActor catches him. The ◆ dual-use readout now lists the top P4 brokers first.

crates/cockpit-server/src/main.rs — register the two card routes.

Test on Railway

  • curl /api/osint/card.html?mask=520 → the card with only bits 3+9 (MLTask + impact); omit mask → all 12 fields. This is the FieldMask ViewFilter, server-rendered.
  • Fire ◆ dual-use in the graph → the P4 backdoor platforms head the readout.

Notes

  • Could not cargo/npm-verify locally (network-gated); structurally balanced, mirrors existing patterns — Railway is the verification.
  • askama-proper (woa-rs uses askama 0.12 + askama_axum 0.4) is a clean swap for card.html; q2 is edition 2024 so it wants a compat check first — the Html<String> render ships the ViewFilter now regardless.

🤖 Generated with Claude Code


Generated by Claude Code

Summary by CodeRabbit

  • New Features

    • Added a new OSINT card view with both JSON and HTML endpoints.
    • Introduced a mask-based filter so users can show only selected fields in the card.
    • Expanded the OSINT graph view with clearer power-level labels and a broker summary section.
  • Bug Fixes

    • Improved power ranking for non-AI actors by using graph position in the network, making the divergence view more accurate and informative.

…4-level power gradient

I own classid 0x0700 and its ClassView — so define it. The card that was
returning `&[]` from OGAR now exists:

- osint_classview.rs: OsintClassView impls lance_graph_contract::ClassView for
  0x0700 with the 12-field card (bit i = ValueTenant position i), predicate_iri
  carrying the reasoning role (need/offer/intent/impact/person/state/identity/
  relation). bit 11 = McClelland motive. Labels live in the ClassView (above the
  SoA), values in the entry — the Quartett card.
- GET /api/osint/card?mask=<bits> — projects the card through a FieldMask (the
  Redmine ERB ViewFilter, server-side); omitted = FULL. render_rows(0x0700, mask)
  now returns the surviving (label, predicate) rows. Two unit tests cover the
  12-field order + the mask filter.
- Canonical home is OGAR (ogar-vocab osint ObjectView); this owner-authored
  q2-local impl works until mirrored upstream (same pattern as mock_driver.rs).

Power gradient (Freud stages, Rheinberg's Potsdam lectures; McClelland nPow
base) now has ALL FOUR levels reachable — powerOfAiro previously skipped P2:
  P1 oral   'I consume from others to myself'          → AISubject
  P2 anal   'I control myself'                         → AIOperator  (was missing)
  P3 phallic 'I control others'                        → AIDeployer
  P4 genital 'I empower others/stakeholders to control'→ AIDeveloper/Provider/Supplier

Next: askama HTML template over render_rows + palette emits the FieldMask
(moves the field render server-side → kills the vis-network repaint freeze).
…ph position

The power model exists to explain the desire to be in power circles (Epstein
the archetype): control others / get something / fill a need / be a platform
for backdoor networking. The last — 'empower others/stakeholders to control
others' (P4) — is the broker, and his power is NOT an AIRO actor role: it's
GRAPH POSITION. powerOfAiro alone read him as P0.

Add powerOfActor for Person(2)/Stakeholder(1) nodes, from graph structure over
the rendered entity edges:
- P4 backdoor platform = Burt structural-hole brokerage (degree × openness):
  high degree bridging neighbours who don't know each other — the connective
  tissue between otherwise-separate power circles.
- P3 controls others = out-edge dominance.
- P1 consumed from = in-edge dominance.
- else affiliation/peripheral.

powerOf(i) now combines: an AIRO role wins (AI-system actor); else a social
actor reads from position. The divergence readout lists the top P4 brokers
first — surfacing the backdoor-networker the model was built to explain.
Brokerage is cached + the O(d²) pair scan is capped at 24 neighbours.
The Redmine ERB ViewFilter, rendered server-side in the codebase's own
Html<String> idiom (no template engine exists in the workspace; adding askama
blind on edition-2024 would risk the whole binary). render_rows is template-
agnostic, so this is a drop-in swap for an askama template once a version is
pinned — the projection (mask → rows) is identical either way.

GET /api/osint/card.html?mask=<bits> renders the 0x0700 card as an HTML table:
role (from the predicate prefix) · field · predicate, FieldMask-filtered.
@coderabbitai

coderabbitai Bot commented Jul 1, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@AdaWorldAPI, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 30 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 6e871833-e46e-42df-b79b-e4e1671444c0

📥 Commits

Reviewing files that changed from the base of the PR and between 6f19621 and dd1595f.

📒 Files selected for processing (3)
  • crates/cockpit-server/Cargo.toml
  • crates/cockpit-server/src/osint_classview.rs
  • crates/cockpit-server/templates/osint_card.html
📝 Walkthrough

Walkthrough

Updates OsintGraph.tsx's dual-use POWER gradient logic with a new structural-hole brokerage metric for non-AI actor power inference and adds a broker summary section to the divergence readout. Adds a new Rust osint_classview module defining an OSINT ClassView with JSON/HTML card endpoints wired into the main router.

Changes

Dual-use POWER Model and Divergence UI

Layer / File(s) Summary
POWER gradient mapping
cockpit/src/OsintGraph.tsx
POWER_LEVEL labels expanded and powerOfAiro(bits) rewritten to distinguish Operator vs Deployer via separate bit tests.
Brokerage-based POWER inference
cockpit/src/OsintGraph.tsx
Adds adjacency/degree tracking and a Burt structural-hole brokerage(i) score; introduces powerOfActor(i) and revises powerOf(i) to combine AIRO-role power with graph-position power; duModel now returns a brokers array of top-ranked Person/Stakeholder nodes.
Divergence readout update
cockpit/src/OsintGraph.tsx
fireDivergence now prepends broker summary lines from duModel.brokers before existing causal-chain lines.

OSINT ClassView API

Layer / File(s) Summary
Class schema and ClassView
crates/cockpit-server/src/osint_classview.rs
Defines OSINT_CLASS (0x0700), a static ordered 12-field FieldRef array, and OsintClassView returning fields only for that classid with a fixed dolce category.
JSON and HTML handlers with tests
crates/cockpit-server/src/osint_classview.rs
Adds CardQuery, osint_card_handler (JSON with classid/mask/field_count/rows), and osint_card_html_handler (HTML table parsing aiwar:<role>/... predicates); includes unit tests for field count, unknown classid, and mask filtering.
Router wiring
crates/cockpit-server/src/main.rs
Declares mod osint_classview; and registers /api/osint/card and /api/osint/card.html GET routes.

Estimated code review effort: 3 (Moderate) | ~30 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant AxumRouter
  participant osint_classview
  participant OsintClassView

  Client->>AxumRouter: GET /api/osint/card?mask=...
  AxumRouter->>osint_classview: osint_card_handler(CardQuery)
  osint_classview->>OsintClassView: render fields with FieldMask
  OsintClassView-->>osint_classview: field rows
  osint_classview-->>Client: JSON {classid, mask, field_count, rows}

  Client->>AxumRouter: GET /api/osint/card.html
  AxumRouter->>osint_classview: osint_card_html_handler(CardQuery)
  osint_classview->>OsintClassView: render fields with FieldMask
  OsintClassView-->>osint_classview: field rows
  osint_classview-->>Client: HTML table
Loading

Poem

A rabbit hops through graphs so wide,
counting brokers, power inside 🐇
Structural holes now come to light,
new cards render, JSON and white,
hop, hop — the OSINT web grows tight!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately highlights the new 0x0700 ClassView card, FieldMask projection, and broker-power graph changes.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

(b) Add askama 0.12 (core, render-to-String — keeps the Html<String> axum
idiom, no askama_axum↔axum coupling; matches woa-rs's pin). The card.html
handler now renders through a compile-time-checked askama template
(templates/osint_card.html): the FieldMask carves the rows in Rust, the
template is a dumb {% for %} loop with zero per-field conditionals — the
"XSLT over the projection" pattern from OGAR's CLASSVIEW-FIELDVIEW-ASKAMA-
BITMASK doctrine. Default HTML escaping (XSS-safe).

Align the ClassView to the V3 SoA bake (data/osint-v3/) and the OGAR
mirror (ogar-vocab osint_system/osint_person), so bake ↔ reasoning ↔ OGAR
canon agree. 07xx is the operator-ratified canonical OSINT domain; the low
u16 is the frozen concept, the APP_PREFIX (0x1000, V3 format signal) is the
render half. Two concepts, matching the two GUIDs of a baked node:
- OSINT_SYSTEM_CLASS 0x0700 — 12 AIRO/VAIR dims in GUID1 6×(8:8) tier order
  (currentStatus, type, militaryUse, civicUse, MLTask, MLType, purpose,
  capacity, output, impact, stakeholder, airo:type). predicate_iri carries
  the reasoning role (need/offer/intent/causality/person/…).
- OSINT_PERSON_CLASS 0x0701 — 5 McClelland/Rubicon dims from GUID2 (stage,
  need, receptor, rubicon, motive): the Epstein-archetype motive lens.

/api/osint/card[.html] now take an optional ?class=<id> (defaults to the
system card). Unit tests cover both cards + the askama render path.

Note: cockpit-server (deno_core fork + lance-graph + ndarray tree) is too
heavy to compile in-session; Railway is the build check.

Co-Authored-By: Claude <noreply@anthropic.com>
@AdaWorldAPI AdaWorldAPI merged commit 9c1a9e1 into main Jul 1, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant